Un peu d'histoire

Le système hexadécimal est utilisé notamment en électronique numérique et en informatique car il est particulièrement commode et permet un compromis entre le code binaire des machines et une base de numération pratique à utiliser pour les ingénieurs. En effet, chaque chiffre hexadécimal correspond exactement à quatre chiffres binaires (ou bits), rendant les conversions très simples et fournissant une écriture plus compacte. L'hexadécimal a été utilisé la première fois en 1956 par les ingénieurs de l'ordinateur Bendix G-15.

Écriture en base 16

Le principe générale est le même que pour l'encodage en base 10 ou base 2.

Pour écrire un nombre en base 16, il faut disposer d'un caractère pour chacun des entiers de 0 à 15. Or, on ne dispose pas d'assez de chiffres pour écrire les 16 valeurs de la base 16. On complète donc les chiffres de 0 à 9 par les six premières lettres de l'alphabet : A, B, C, D, E, F.

Base 10 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Base 16 0 1 2 3 4 5 6 7 8 9 A B C D E F

Pour convertir l'écriture hexadécimale d'un entier positif vers son écriture décimale, il suffit :

$A_{16}=10\times 16^{0}=10_{10}$

$A1_{16}=10\times16^{1}+1\times 16^{0}=161_{10}$

$A9C3F2=10 \times 16^{5}+9\times 16^{4}+12\times 16^{3}+3\times 16^{2}+15\times 16^{1}+2\times 16^{0}=11125746_{10}$

Une autre vidéo avec une autre explication et un exemple :

Prouver que $2A4DF1_{16}=2772465_{10}$.

Code de déblocage de la correction :

Conversion base 16 en base 10

Dans cette exercice, un nombre écrit en hexadécimal sera représenté sous forme de liste. par exemple A9C3 est représenté par ["A",9,"C",3]

Écrire une fonction hexa_en_deci(l) en Python qui renvoie, à une liste correspondant à l'écriture en hexadécimal d'un nombre, le nombre codé en base 10.

Il est utile d'implémenter un dictionnaire reprenant le tableau donnant la correspondance base 10/base 16.

Tester votre fonction avec l'exemple précédent.

Aides possibles en cas de difficultés :

Voici les étapes à suivre pour réaliser le programme :

  1. Commencer par écrire l'en-tête de la fonction hexa_en_deci en n'oubliant pas le paramètre.

  2. Créer un dictionnaire qui associe à chacun des 16 chiffres hexadécimaux sa valeur en décimal.

  3. Inverser l'ordre des éléments de la liste l afin que l'indice de chaque élément corresponde à l'exposant de la puissance de 16 à associer à cet élément.

  4. Balayer la liste par les positions.

  5. À chaque tour, ajouter à la variable stockant la valeur cherchée le produit de la valeur de l'élément par la puissance de 16 correspondante.
    Utiliser le dictionnaire créé pour obtenir facilement la valeur.

  6. Ne pas oublier de tester la fonction hexa_en_deci à l'aide des exemples précédents et conversions déjà effectuées à la main.

En cas de difficultés, en cliquant ici, il est possible d'obtenir un code à trous à compléter.

Copier puis compléter le script suivant en vous servant des commentaires et des tests proposés ci-dessus.

def hexa_en_deci(l: list) -> int:
    nombre_en_deci = 0
    dico = {i: ... for i in range(...)}
    dico["A"] = ...
    dico["B"] = ...
    dico[...] = ...
    ... = ...
    ... = ...
    ... = ...
    l.reverse()
    for i in ...:
        nombre_en_deci += ... * ...
    return nombre_en_deci

print(hexa_en_deci(["2", "A", "4", "D", "F", "1"]) # affiche 2772465

Attention ! Il y a d'autres manières d'écrire le script demandé, manières tout aussi pertinentes que celle proposée ci-dessus avec des trous.

Code de déblocage de la correction :

Une lecture de l'exercice précédent pour vous aider à le réussir :

Conversion base 10 en base 16

L'algorithme de conversion de la base 10 à la base 16 est très proche de celui de la conversion de décimal à binaire. :

Procédure de conversion base 10 en base 16

Voici la procédure :

On convertit 13 en "D" et 14 en "E".

L'écriture binaire de $5869_{10}$ est donc $16ED_{16}$

On peut aussi essayer de décomposer le nombre directement comme combinaison de puissance de 16 (..., 256, 16, 1).

$16_{10}=1\times16^1+0\times16^{0}=10_{16}$

$313_{10}=256+3\times 16+9=1\times 16^{2}+3\times 16^{1}+9\times 16^{0}=139_{16}$

Une autre vidéo avec une autre explication et un autre exemple :

Convertir $2988_{10}$ en hexadécimal.

Code de déblocage de la correction :

Dans cette exercice, un nombre écrit en hexadécimal sera représenté sous forme de liste. par exemple A9C3 est représenté par ["A",9,"C",3]

Écrire une fonction deci_en_hexa(nombre) en Python qui renvoie à un nombre codé en base 10 une liste correspondant au codage de ce nombre en base 16.

Il sera utile d'implémenter un dictionnaire reprenant le tableau au donnant la correspondance base 10/base 16.

Tester votre fonction avec l'exemple précédent.

Aides possibles en cas de difficultés :

Voici les étapes à suivre pour réaliser le programme :

  1. Commencer par écrire l'en-tête de la fonction deci_en_hexa en n'oubliant pas le paramètre.

  2. Créer un dictionnaire qui associe à chacun des 16 chiffres hexadécimaux sa valeur en décimal.

  3. Créer une liste vide, en Python [], qui stockera progressivement la liste des restes obtenus.

  4. Effectuer une boucle répétitive en repérant quelle est la condition d'arrêt de la procédure de la partie 4.

  5. Calculer le quotient et le reste de le division euclidienne par 16.

  6. Rajouter dans la liste le nouveau nombre à considérer.

  7. Faire en sorte qu'au tour suivant le quotient soit pris en compte dans la division euclidienne.

  8. Penser à inverser la liste des restes avant le renvoi final.

  9. Ne pas oublier de tester la fonction deci_en_hexa à l'aide des exemples précédents et conversions déjà effectuées à la main.

En cas de difficultés, en cliquant ici, il est possible d'obtenir un code à trous à compléter.

Copier puis compléter le script suivant en vous servant des commentaires et des tests proposés ci-dessus.

def deci_en_hexa(nombre: int) -> list:
    nombre_en_deci = 0
    dico = {i: ... for i in range(...)}
    dico["A"] = ...
    dico["B"] = ...
    dico[...] = ...
    ... = ...
    ... = ...
    ... = ...
    l = []
    q = nombre
    while ...:
        l.append(...)
        q = ...
    l.reverse()
    return l

print(deci_en_hexa(2988) # affiche ["B", "A", "C"]) 

Attention ! Il y a d'autres manières d'écrire le script demandé, manières tout aussi pertinentes que celle proposée ci-dessus avec des trous.

Code de déblocage de la correction :

La fonction native Python hex permet d'obtenir la représentation hexadécimale d'un entier naturel écrit sous forme décimale.
Le renvoi commence toujours par 0x pour signifier que les chiffres et caractères suivants ont une valeur hexadécimale.

hex(1000) renvoie 0x3e8 car $1000$ s'écrit en hexadécimale $3E8$.

binaire et hexadécimal

Historiquement, c'est la conversion binaire/hexadécimal qui a été utilisé.

Sur 4 bit on peut écrire les nombres de 0 à 15. Avec 4 bit on peut, par conséquent, coder toutes les possibilités en base 16.

Le passage d'un bloc de 4 bit au suivant se fait par la multiplication par 16.

Voici la méthode pour convertir directement l'écriture binaire d'un nombre entier naturel en son écriture hexadécimale :

$100011001110_{2}=1000\textrm{ }1100\textrm{ }1110=8_{10}\textrm{ }12_{10}\textrm{ }14_{10}=8CE_{16}$

Convertir les nombres $110010010001_{2}$ et $1001001110_{2}$ en base 16.

Code de déblocage de la correction :

Voici la méthode pour convertir directement l'écriture hexadécimale d'un nombre entier naturel en son écriture binaire :

$A2F3_{16}=10_{10}\textrm{ }2_{10}\textrm{ }15_{10}\textrm{ }3_{10}=1010_{2}\textrm{ }0010_{2}\textrm{ }1111_{2}\textrm{ }0011_{2}=1010001011110011_{2}$

Convertir les nombres $BE91_{16}$ et $1CD_{16}$ en binaire.

Code de déblocage de la correction :

Exercices

Donner l'écriture décimale du nombre écrit en hexadécimal $FAC_{16}$.

Code de déblocage de la correction :

Donner l'écriture en hexadécimal du nombre écrit en base 10 par $11995_{10}$.

Code de déblocage de la correction :

QCM

Questions issues de la Banque Nationale de Sujets

Propriétaire des ressources ci-dessous : ministère de l'Éducation nationale et de la jeunesse, licence CC BY SA NC

Voici une sélection de questions issues de la banque nationale de sujets, répondez à ces questions (attention, cette sélection n'est pas exhaustive).

Comment s'écrit en base 16 (en hexadécimal) le nombre dont l'écriture binaire est 0010 1100 ?

Réponses :

A- 1D

B- 2C

C- 3C

D- 3E

On considère les nombres dont l'écriture en base 16 (en hexadécimal) sont de la forme suivante : un 1 suivi de 0 en nombre quelconque, comme 1, 10, 100, 1000 etc.
Tous ces nombres sont exactement :

Réponses :

A- les puissances de 2

B- les puissances de 8

C- les puissances de 10

D- les puissances de 16

Quelle est l'écriture décimale de l'entier positif dont l'écriture hexadécimale (en base 16) est 3F ?

Réponses :

A- 18

B- 45

C- 63

D- 315

Quelle est l'écriture hexadécimale (en base 16) du nombre entier 157 ?

Réponses :

A- 8F

B- 9C

C- 9D

D- AD

Le codage d’une couleur se fait à l'aide de trois nombres compris chacun, en écriture décimale, entre 0 et 255 (code RVB).
La couleur « vert impérial » est codée, en écriture décimale, par (0, 86, 27).
Le codage hexadécimal correspondant est :

Réponses :

A- (0, 56, 39)

B- (0, 56, 1B)

C- (0, 134, 39)

D- (0, 134, 1B)

L'entier positif 255 se représente en hexadécimal (base 16) par :

Réponses :

A- 99

B- AA

C- CC

D- FF

L'entier positif dont l'écriture binaire est 0011 1011 se représente en hexadécimal (base 16) par :

Réponses :

A- 32

B- 33

C- 3B

D- B3

Autres QCM

Les QCM suivants sont issus de https://genumsi.inria.fr.

(Auteur Nicolas Revéret)

Tom peut lire dans les propriétés de son smartphone l’adresse MAC ci-contre : 5E FF 56 A2 AF 15.
Sachant que cette adresse est exprimée en hexadécimal, elle est donc codée sur :

Réponses :

A- 12 octets

B- 24 octets

C- 48 octets

D- 192 octets

(Auteur François Henry)

Donner l'écriture binaire du nombre hexadécimal 6E :

Réponses :

A- 1101110

B- 1110110

C- 1101101

D- 11110010

(Auteur Nicolas ROTA)

La couleur "turquoise" a pour code RGB (64,224,208). Sa représentation en hexadécimal est :

Réponses :

A- #D1C11E

B- #40E0D0

C- #64EA61

D- #64ED

Les couleurs peuvent être codées en RVB (Rouge, Vert et Bleu) par trois nombres entiers compris entre 0 et 255 donnant chacun l'intensité respective en Rouge, Vert et Bleu.
Plutôt que d'écrire ces nombres sous écriture décimale, il est possible de les écrire en hexadécimale, écriture souvent précédée par le symbole #.
Parmi les propositions suivantes, laquelle est la plus proche du bleu ?

Réponses :

A- #1234EF

B- #12EF43

C- #FE4321

D- #BEBEBE

(Auteur Joao Paulo DA CUNHA)

Je veux mettre le texte en vert. Parmi ces quatre propositions laquelle est la plus proche du vert ?

Réponses :

A- color : vert;

B- color : rgb(255,0,0);

C- color : #0000FF;

D- color : #22FF22;

(Auteur Thomas FRUCHART)

Quelle est l'écriture décimale du nombre hexadécimal $AA_{(16)}$ ?

Réponses :

A- 110

B- 170

C- 176

D- 1010

Les adresses IPv6 ont une longueur de 128 bits et sont notées sous forme de chaînes de valeurs hexadécimales.
Combien de caractères hexadécimaux contient une adresse IPv6 ?

Réponses :

A- 4

B- 6

C- 16

D- 32

Une adresse lien local IPv6 permet à un appareil de communiquer avec d'autres appareils IPv6 sur la même liaison et uniquement sur cette liaison.
Ces adresses lien local IPv6 se trouvent dans la plage $fe80::/10$, ce qui signifie que toutes ces adresses commencent par les 10 mêmes premiers bits : les 10 bits de poids forts du nombre écrit en hexadécimal $FE80$.
Ainsi, toutes ces adresses lien local IPv6 commencent par :

Réponses :

A- 1010 1010 10

B- 1110 1000 00

C- 1111 1110 10

D- 1111 1111 00

(Auteur Christophe BEASSE)

Le nombre hexadécimal $A380$ est codé sur combien d'octets ?

Réponses :

A- 2

B- 4

C- 8

D- 16

Demander le programme !

  1. définir le système hexadécimal.
  2. la valeur de chaque chiffre hexadécimal.
  1. la conversion à la main d'un nombre hexadécimal vers son écriture décimale.
  2. la conversion à la main d'un nombre entier naturel écrit sous forme décimal vers son écriture hexadécimale.
  3. écrire un programme permettant de passer de l'écriture hexadécimale d'un nombre à celle décimale.
  4. écrire un programme permettant de passer de l'écriture décimale d'un nombre à celle hexadécimale.
  5. la conversion à la main d'un nombre binaire en son écriture hexadécimale.
  6. la conversion à la main d'un nombre hexadécimale en son écriture binaire.

Licence Creative Commons
Les différents auteurs mettent l'ensemble du site à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International